package com.dong.tools;

import org.springframework.web.SpringServletContainerInitializer;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.AbstractContextLoaderInitializer;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

/**
 * <h1></h1>
 *

 *
 *
 * note
 * 1. web容器在启动的时候，会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer
 * 2. 加载这个文件指定的类SpringServletContainerInitializer  {@link SpringServletContainerInitializer}
 * 3. spring的应用一启动会加载感兴趣的 WebApplicationInitializer 接口的下的所有组件；  {@link WebApplicationInitializer}
 * 4. 并且为WebApplicationInitializer组件创建对象（组件不是接口，不是抽象类）
 *      1). {@link AbstractContextLoaderInitializer}：创建根容器；createRootApplicationContext()； {@link AbstractContextLoaderInitializer#createRootApplicationContext()}
 *      2). {@link AbstractDispatcherServletInitializer}：  {@link AbstractDispatcherServletInitializer}
 *          a). 创建一个web的ioc容器；createServletApplicationContext();
 *          b). 创建了DispatcherServlet；createDispatcherServlet()；
 *          c). 将创建的DispatcherServlet添加到ServletContext中；
 *              getServletMappings();
 *      3). {@link AbstractAnnotationConfigDispatcherServletInitializer}：注解方式配置的DispatcherServlet初始化器   {@link AbstractAnnotationConfigDispatcherServletInitializer}
 *          a). 创建根容器：createRootApplicationContext()
 *              getRootConfigClasses();传入一个配置类
 *          b). 创建web的ioc容器： createServletApplicationContext();
 *              获取配置类；getServletConfigClasses();</br>
 * 总结： 以注解方式来启动SpringMVC；继承 {@link AbstractAnnotationConfigDispatcherServletInitializer}； 实现抽象方法指定DispatcherServlet的配置信息；
 *
 * {@link MyWebAppInitializer}
 * =========================== 定制SpringMVC；
 * 1）、@EnableWebMvc:开启SpringMVC定制配置功能； <mvc:annotation-driven/>；
 *
 * 2）、配置组件（视图解析器、视图映射、静态资源映射、拦截器。。。） extends WebMvcConfigurerAdapter
 *
 *  @author : dzj
 *  @create: 2020-05-04 10:56
 */
public class Main {
    public static void main(String[] args) {
        AbstractContextLoaderInitializer s   = null;
        AbstractAnnotationConfigDispatcherServletInitializer ss = null;
        AbstractDispatcherServletInitializer s3 = null;

    }
}
